#ifndef __IO_H_
#define __IO_H_
#include <stdint.h>

enum {
    PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA11, PA12, PA13, PA14, PA15,
	  PB0, PB1, PB2, PB3, PB4, PB5, PB6, PB7, PB8, PB9, PB10, PB11, PB12, PB13, PB14, PB15,
    PC0, PC1, PC2, PC3, PC4, PC5, PC6, PC7, PC8, PC9, PC10, PC11, PC12, PC13, PC14, PC15,
    PD0, PD1, PD2, PD3, PD4, PD5, PD6, PD7, PD8, PD9, PD10, PD11, PD12, PD13, PD14, PD15,
    PE0, PE1, PE2, PE3, PE4, PE5, PE6, PE7, PE8, PE9, PE10, PE11, PE12, PE13, PE14, PE15,
    PNO,
};

enum {
    Mode_AIN,
    Mode_IN_FLOATING,
    Mode_IPD,
    Mode_IPU,
    Mode_Out_OD,
    Mode_Out_PP,
    Mode_AF_OD,
    Mode_AF_PP,
};

void IOInit(uint8_t pin, uint8_t mode);
void IOWrite(uint8_t pin, uint8_t level);
uint8_t IORead(uint8_t pin);
void IODisableJtag();


class SwitchInput {
 public:
  void Init(uint8_t pin, uint8_t mode=Mode_IPU);
  uint8_t Read();
  bool CheckStatuLoop();
 private:
  uint8_t pin_;
  uint8_t status_;
  uint8_t cur_statu;
  uint8_t last_statu_;
  uint32_t time_;
};

#endif
